package com.heima.media.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.heima.common.dto.PageResponseResult;
import com.heima.common.dto.ResponseResult;
import com.heima.media.dto.ChannelDto;
import com.heima.media.entity.WmChannel;
import com.heima.media.mapper.WmChannelMapper;
import com.heima.media.service.IWmChannelService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 频道信息表 服务实现类
 * </p>
 *
 * @author mcm
 * @since 2021-11-02
 */
@Service
public class WmChannelServiceImpl extends ServiceImpl<WmChannelMapper, WmChannel> implements IWmChannelService {

    //根据频道名称模糊查询分页列表
    @Override //前端传输过来的对象里面 包含（当前页page   页大小size  频道名称name）
    public ResponseResult listByName(ChannelDto dto) {
        //1.构建分页对象
        Page<WmChannel> page = new Page<>(dto.getPage(),dto.getSize());

        //2.构建查询条件 按照频道名称查询
        LambdaQueryWrapper<WmChannel> queryWrapper = new LambdaQueryWrapper<>();
        //如果前端有提交过来频道的名称  那么就根据名称进行模糊查询
        if(StringUtils.isNoneBlank(dto.getName())) {
            queryWrapper.like(WmChannel::getName, dto.getName());
        }

        //3.分页查询的方法 参数为 分页对象 和 查询内容
        //将查询出来的内容进行分页
        this.page(page,queryWrapper); //带条件分页查完 page里就有总页数total和当前页数据了Records

        //4.封装分页响应结果  实体模块中有该实体类
     //   int i = 1/0;  //模拟异常
        //需要封装的内容：当前页page   页大小size  总页数total
        PageResponseResult responseResult = new PageResponseResult<>(dto.getPage(), dto.getSize(), page.getTotal(), page.getRecords());
        return responseResult; //是查询所以得返回东西
    }


    //根据前端传输过来的频道数据进行保存
    @Override
    public ResponseResult saveChannel(WmChannel entity) {
        //根据频道名称判断该频道是否存在
        LambdaQueryWrapper<WmChannel> queryWrapper = new LambdaQueryWrapper<>();
        //根据前端传输的频道名称与数据库中的进行判断 如果存在不保存 不存在新增
        queryWrapper.eq(WmChannel::getName,entity.getName());
        //查询该名称下的信息数量 为0 则表示没有该频道
        int count = this.count(queryWrapper);
        //为0 则表示没有该频道  新增该频道
        if (count==0){
            //entity 里面已经有基本数据  只需要添加前端为提交的其他属性值即可
            entity.setIsDefault(false);//是否默认频道
            entity.setStatus(false);//是否有效
            entity.setOrd(1);//默认排序
            this.save(entity);//执行保存
        }else{
            //就标识该频道已存在
            throw  new RuntimeException("频道已存在！！！");
        }

        return null;//是保存所以不用返回东西
    }
}
